package org.jobtask.config;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

public final class SystemIdentification {
	
	/**
	 * 对代码所运行的系统进行判断,返回该操作系统的名称
	 * @return String
	 * 返回操作系统的字符串描述
	 */
	public static String assertOS(){
		String sys=System.getProperty("os.name");
		if(sys.toLowerCase().indexOf("linux")!=-1){
			sys="linux";
		}else if(sys.toLowerCase().indexOf("windows")!=-1){
			sys="windows";
		}else if(sys.toLowerCase().indexOf("unix")!=-1){
			sys="unix";
		}
		return sys;
	}
	
	/**
	 * 
	 * @param sd
	 * @return  Date
	 * 将给定的字符串分析成目标格式的日期对象
	 */
	public static Date parseStringToDateTime(String sd){
		 Date date=null;
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd HH:m:s");
		try {
			    date=sdf.parse(sd);
		} catch (ParseException e) {
			e.printStackTrace();
		}
		return date;
	}
	
	
	/**
	 * @param date
	 * @return String
	 * 将日期对象以目标格式的字符串来表示
	 */
	public static String parseDateTimeToString(Date date,boolean containerTime){
		String dtf=containerTime?"yyyy-MM-dd HH:m:s":"yyyy-MM-dd";
		SimpleDateFormat format=new SimpleDateFormat(dtf);
		return format.format(date);
	}
	
	
	/**
	 * @param  time  需要被格式化的日期时间对象
	 * @param  containerSecond  再返回的格式化字符串中,是否需要包含秒数.默认包含
	 * @return String
	 * 返回指定的time对象,格式化以后的字符串表示
	 */
	public static String parseTimeToString(Date time,boolean containerSecond){
		String dtf=containerSecond?"HH:m:s":"HH:m";
		SimpleDateFormat format=new SimpleDateFormat(dtf);
		return format.format(time);
	}
	
	
	/**
	 * @return String
	 * 返回当前系统的年份,以四位表示(带世纪)
	 */
	public static String getFullYear(){
		Calendar date=Calendar.getInstance();
		return ""+date.get(Calendar.YEAR);
	}
	
	/**
	 * @param reference
	 * Date类型参数,用于与系统时间进行比较的时间戳
	 * @param timeLimit
	 * 时间比较时的限制数(以秒为单位)
	 * @return boolean
	 * 如果跟当前时间相差时间超过了限制数,则返回true,否则返回false
	 * @Description
	 * 用于比较给定的时间是否已超过指定的时间限制数
	 */
	public static boolean isExceed(Date reference,long timeLimit){
		boolean isOK=false;
		if(reference==null) return false;
		Calendar currentCal=Calendar.getInstance();
		long ms=currentCal.getTimeInMillis()-reference.getTime();
		if(ms>=timeLimit*1000){
			isOK=true;
		}
		return isOK;
	}
}
